﻿using System;
using System.Linq;
using User.Global.Constvalues.Web;
using User.Global.Constvalues.Web.Navigation;

namespace User.Web.Common.HtmlHelper
{
    /// <summary>
    /// Prüfen ob es sich um den gerade aufgerufenen View um die angegebene Action und Controller handelt und dann entsprechend "active" zurückgegeben
    /// um diesen String als CSS Klasse setzten zu können.
    /// </summary>
    public static class HtmlHelperActiveMenue
    {
        /// <summary>
        /// Ermittelt ob es sich bei dem agerade angezeigten Controller und Action auch um die Übergebenen Werte handelt,
        /// wenn ja wird "active" zurückgegeben.
        /// </summary>
        /// <param name="controller">Der Controller um den es sich handelt.</param>
        /// <param name="action">Die Action die gerade verwendet wird.</param>
        /// <returns>String.Emptry oder wenn controller und action übereinstimmten "active"</returns>
        public static string GetActiveMenue(this System.Web.Mvc.HtmlHelper helper, EController controller, Enum action)
        {
            if (helper.ViewContext.Controller.ControllerContext.RouteData.Values.ContainsKey(WebConstValues.ActionString) &&
                helper.ViewContext.Controller.ControllerContext.RouteData.Values.ContainsKey(WebConstValues.ControllerString))
            {
                string routeAction = helper.ViewContext.Controller.ControllerContext.RouteData.Values[WebConstValues.ActionString].ToString();
                string routeController = helper.ViewContext.Controller.ControllerContext.RouteData.Values[WebConstValues.ControllerString].ToString();

                if (!string.IsNullOrEmpty(routeAction) && !string.IsNullOrEmpty(routeController))
                {
                    if (controller.ToString().ToLower() == routeController.ToLower() && routeAction.ToLower() == action.ToString().ToLower())
                    {
                        return "active";
                    }
                }
            }

            return string.Empty;
        }

        /// <summary>
        /// Ermittelt ob es sich bei dem agerade angezeigten Controller und Action auch um die Übergebenen Werte handelt,
        /// wenn ja wird "active" zurückgegeben.
        /// </summary>
        /// <param name="controller">Der Controller um den es sich handelt.</param>
        /// <param name="action">Die Action die gerade verwendet wird, hier können mehrere Actions übergeben werden für die der Link aktiv sein soll</param>
        /// <returns>String.Emptry oder wenn controller und action übereinstimmten "active"</returns>
        public static string GetActiveMenue(this System.Web.Mvc.HtmlHelper helper, EController controller, params Enum[] action)
        {
            if (helper.ViewContext.Controller.ControllerContext.RouteData.Values.ContainsKey(WebConstValues.ActionString) &&
                helper.ViewContext.Controller.ControllerContext.RouteData.Values.ContainsKey(WebConstValues.ControllerString))
            {
                string routeAction = helper.ViewContext.Controller.ControllerContext.RouteData.Values[WebConstValues.ActionString].ToString();
                string routeController = helper.ViewContext.Controller.ControllerContext.RouteData.Values[WebConstValues.ControllerString].ToString();

                if (!string.IsNullOrEmpty(routeAction) && !string.IsNullOrEmpty(routeController))
                {
                    if (controller.ToString().ToLower() == routeController.ToLower() && action.Any(p=>p.ToString().ToLower() == routeAction.ToLower()))
                    {
                        return "active";
                    }
                }
            }

            return string.Empty;
        }
    }
}
